1 Podsumowanie analizy

Dane o materiałach stosowanych do produkcji baterii pozwalają na uzyskanie interesujących wniosków. Wartości udziału atomowego składników w stanie rozładowanym i pojemności grawimetrycznej, a także średniego napięcia dla poszczególnego kroku napięcia i gęstości energii w odniesieniu do masy baterii wykazują stosunkowo dużą korelacje, co może być interesującym kierunkiem dla nowych badań. Wsród najważniejszych trendów w badaniach nad bateriami można wyróżnić zastosowanie jako głównego jonu odpowiadającego za transport ładunku litu, rzadziej wapnia lub magnezu. Częste jest również używanie w materiałach tlenu. Zbiór danych pozwala na skuteczną predykcję parametrów nowych materiałów z wykorzystaniem technik uczenia maszynowego.

2 Biblioteki

library(dplyr)
library(ggplot2)
library(tidyr)
library(plotly)
library(knitr)
library(caret)
library(randomForest)

3 Wczytanie danych

data <- read.csv("mp_batteries.csv")

columns <- names(data)
string_columns <- c("Battery.Formula", "Working.Ion", "Formula.Charge", "Formula.Discharge")
numeric_columns <- setdiff(columns, c(string_columns, "Battery.ID"))

4 Podstawowe statystyki

Liczba wierszy: 4351.

Podsumowanie:

kable(summary(data))
Battery.ID Battery.Formula Working.Ion Formula.Charge Formula.Discharge Max.Delta.Volume Average.Voltage Gravimetric.Capacity Volumetric.Capacity Gravimetric.Energy Volumetric.Energy Atomic.Fraction.Charge Atomic.Fraction.Discharge Stability.Charge Stability.Discharge Steps Max.Voltage.Step
Length:4351 Length:4351 Length:4351 Length:4351 Length:4351 Min. : 0.00002 Min. :-7.755 Min. : 5.176 Min. : 24.08 Min. :-583.5 Min. :-2208.1 Min. :0.00000 Min. :0.007407 Min. :0.00000 Min. :0.00000 Min. :1.000 Min. : 0.0000
Class :character Class :character Class :character Class :character Class :character 1st Qu.: 0.01747 1st Qu.: 2.226 1st Qu.: 88.108 1st Qu.: 311.62 1st Qu.: 211.7 1st Qu.: 821.6 1st Qu.:0.00000 1st Qu.:0.086957 1st Qu.:0.03301 1st Qu.:0.01952 1st Qu.:1.000 1st Qu.: 0.0000
Mode :character Mode :character Mode :character Mode :character Mode :character Median : 0.04203 Median : 3.301 Median : 130.691 Median : 507.03 Median : 401.8 Median : 1463.8 Median :0.00000 Median :0.142857 Median :0.07319 Median :0.04878 Median :1.000 Median : 0.0000
NA NA NA NA NA Mean : 0.37531 Mean : 3.083 Mean : 158.291 Mean : 610.62 Mean : 444.1 Mean : 1664.0 Mean :0.03986 Mean :0.159077 Mean :0.14257 Mean :0.12207 Mean :1.167 Mean : 0.1503
NA NA NA NA NA 3rd Qu.: 0.08595 3rd Qu.: 4.019 3rd Qu.: 187.600 3rd Qu.: 722.75 3rd Qu.: 614.4 3rd Qu.: 2252.3 3rd Qu.:0.04762 3rd Qu.:0.200000 3rd Qu.:0.13160 3rd Qu.:0.09299 3rd Qu.:1.000 3rd Qu.: 0.0000
NA NA NA NA NA Max. :293.19322 Max. :54.569 Max. :2557.627 Max. :7619.19 Max. :5926.9 Max. :18305.9 Max. :0.90909 Max. :0.993333 Max. :6.48710 Max. :6.27781 Max. :6.000 Max. :26.9607

5 Analiza wartości atrybutów

5.1 Atrybuty tekstowe

5.1.1 10 naliczniej występujących wartości dla każdego atrybutu tekstowego

10 najliczniej występujących wartości zmiennej Battery.Formula
Value Count
Li0-1V2OF5 19
Li0-1CoPO4 18
Li0-1FePO4 18
Li0-3MnFeCo(PO4)3 17
Li0-1MnPO4 15
Li0-1V4OF11 15
Li0-1V4O5F7 12
Li0-1VF5 12
Li0-1CrP2O7 11
Li0-2MnP2O7 11
10 najliczniej występujących wartości zmiennej Working.Ion
Value Count
Li 2440
Ca 435
Mg 423
Zn 366
Na 309
K 107
Al 95
Y 93
Rb 50
Cs 33
10 najliczniej występujących wartości zmiennej Formula.Charge
Value Count
MnO2 49
TiO2 47
VO2 46
CrO2 45
CoO2 43
NiO2 41
FeO2 36
FePO4 26
WO2 25
CoPO4 24
10 najliczniej występujących wartości zmiennej Formula.Discharge
Value Count
LiCoPO4 19
LiFePO4 19
LiMnPO4 19
LiV2OF5 19
Li5Mn6(BO3)6 18
Li3MnFeCo(PO4)3 17
LiV4OF11 15
Li2MnP2O7 14
Li2FeSiO4 13
LiCrPO4 12
10 najliczniej występujących wartości zmiennej Battery.ID
Value Count
mp-1001925_Mg 1
mp-1003319_Ca 1
mp-10033_Cs 1
mp-10033_Rb 1
mp-1008911_Li 1
mp-1009555_Li 1
mp-1009747_Li 1
mp-1009747_Na 1
mp-1012668_Li 1
mp-1012678_Na 1

5.1.2 Liczba wystąpień wartości

5.1.3 Wnioski

Battery.ID to idenryfikator baterii. Jest on unikalny w zbiorze. Zmienne Battery.Formula, Formula.Charge i Formula.Discharge cechują się dużą liczbą różnych wartości. Oznacza to że testowane jest wiele różnych możliwych subastancji, które mogą zostać użyte do produkcji baterii. Inaczej jest w przypadku zmiennej Working.Ion. Ponad połowa materiałów jako głównego jonu używa litu. Wydaje się to być dominujący trend w badaniach nad bateriami.

5.2 Atrybuty liczbowe

5.2.1 Wartości puste

nan_counts <- sapply(numeric_columns, function(col) sum(is.nan(data[[col]])))

nan_counts_df <- data.frame(
  nan = nan_counts
)

print(kable(nan_counts_df))
nan
Max.Delta.Volume 0
Average.Voltage 0
Gravimetric.Capacity 0
Volumetric.Capacity 0
Gravimetric.Energy 0
Volumetric.Energy 0
Atomic.Fraction.Charge 0
Atomic.Fraction.Discharge 0
Stability.Charge 0
Stability.Discharge 0
Steps 0
Max.Voltage.Step 0

5.2.2 Rozkłady wartości

5.2.3 Wnioski

W zbiorze danych nie brakuje żadnych wartości. Rozkłady większości zmiennych mają wyraźnie zaznaczony najczęściej występujący przedział wartości. Z reguły jest on dość wąski w stosunku do całej dziedziny.

6 Korelacja

numeric_df <- data[, numeric_columns]

correlation_matrix <- cor(numeric_df)
correlation_df <- as.data.frame(as.table(correlation_matrix))
names(correlation_df) <- c("x", "y", "cor")

correlation_df_one_dir <- correlation_df[as.character(correlation_df$x) < as.character(correlation_df$y), ]
correlation_df_sorted <- correlation_df_one_dir[order(-abs(correlation_df_one_dir$cor)), ] %>%
  slice(1:length(correlation_df_one_dir$cor))

6.1 Korelacja wszytskich par zmiennych numerycznych

kable(correlation_df_sorted)
x y cor
Gravimetric.Energy Volumetric.Energy 0.9283253
Gravimetric.Capacity Volumetric.Capacity 0.8584163
Stability.Charge Stability.Discharge 0.8028701
Atomic.Fraction.Discharge Gravimetric.Capacity 0.6807716
Average.Voltage Gravimetric.Energy 0.6656523
Atomic.Fraction.Discharge Volumetric.Capacity 0.6180186
Atomic.Fraction.Charge Atomic.Fraction.Discharge 0.5974157
Average.Voltage Volumetric.Energy 0.5545191
Max.Voltage.Step Steps 0.5352539
Gravimetric.Capacity Max.Delta.Volume 0.4337733
Gravimetric.Energy Max.Voltage.Step 0.3292322
Volumetric.Capacity Volumetric.Energy 0.3257482
Gravimetric.Energy Steps 0.2946075
Atomic.Fraction.Discharge Max.Delta.Volume 0.2906921
Max.Voltage.Step Volumetric.Energy 0.2526625
Max.Delta.Volume Volumetric.Capacity 0.2424769
Steps Volumetric.Energy 0.2381420
Gravimetric.Capacity Volumetric.Energy 0.2304216
Gravimetric.Capacity Gravimetric.Energy 0.2132463
Average.Voltage Volumetric.Capacity -0.2128178
Gravimetric.Energy Volumetric.Capacity 0.2098406
Stability.Charge Volumetric.Energy 0.1783271
Atomic.Fraction.Discharge Average.Voltage -0.1716903
Gravimetric.Energy Stability.Charge 0.1669819
Average.Voltage Stability.Charge 0.1661371
Atomic.Fraction.Discharge Steps 0.1641713
Atomic.Fraction.Charge Volumetric.Energy -0.1473523
Average.Voltage Gravimetric.Capacity -0.1462222
Gravimetric.Capacity Steps 0.1333977
Atomic.Fraction.Charge Gravimetric.Capacity 0.1289210
Average.Voltage Stability.Discharge -0.1284568
Average.Voltage Max.Voltage.Step 0.1271208
Steps Volumetric.Capacity 0.1037051
Atomic.Fraction.Discharge Max.Voltage.Step 0.1019796
Stability.Charge Volumetric.Capacity 0.1015305
Atomic.Fraction.Charge Gravimetric.Energy -0.0972924
Gravimetric.Capacity Max.Voltage.Step 0.0951906
Max.Voltage.Step Stability.Charge 0.0940466
Average.Voltage Max.Delta.Volume -0.0823707
Gravimetric.Energy Stability.Discharge -0.0782609
Atomic.Fraction.Discharge Gravimetric.Energy 0.0645248
Gravimetric.Capacity Stability.Charge 0.0633871
Stability.Discharge Steps -0.0631686
Average.Voltage Steps 0.0627851
Max.Voltage.Step Volumetric.Capacity 0.0626085
Atomic.Fraction.Discharge Volumetric.Energy 0.0610586
Gravimetric.Energy Max.Delta.Volume -0.0609858
Stability.Discharge Volumetric.Energy -0.0599949
Max.Delta.Volume Volumetric.Energy -0.0588321
Atomic.Fraction.Charge Stability.Discharge -0.0523971
Atomic.Fraction.Charge Average.Voltage -0.0385556
Stability.Charge Steps -0.0374860
Max.Delta.Volume Stability.Charge 0.0337587
Atomic.Fraction.Discharge Stability.Charge 0.0324051
Stability.Discharge Volumetric.Capacity 0.0317012
Atomic.Fraction.Charge Steps 0.0297369
Atomic.Fraction.Charge Stability.Charge -0.0273571
Atomic.Fraction.Charge Max.Delta.Volume 0.0213153
Max.Voltage.Step Stability.Discharge -0.0165552
Atomic.Fraction.Discharge Stability.Discharge 0.0143204
Max.Delta.Volume Steps -0.0132582
Gravimetric.Capacity Stability.Discharge 0.0125390
Max.Delta.Volume Max.Voltage.Step -0.0099251
Max.Delta.Volume Stability.Discharge 0.0077357
Atomic.Fraction.Charge Max.Voltage.Step 0.0053420
Atomic.Fraction.Charge Volumetric.Capacity 0.0012456

6.2 Przedstawienie zależności 5 par zmiennych o najwyższej korelacji

x y cor
Gravimetric.Energy Volumetric.Energy 0.9283253
Gravimetric.Capacity Volumetric.Capacity 0.8584163
Stability.Charge Stability.Discharge 0.8028701
Atomic.Fraction.Discharge Gravimetric.Capacity 0.6807716
Average.Voltage Gravimetric.Energy 0.6656523

6.3 Wnioski

Wysoka korelacja zmiennych Gravimetric.Energy i Volumetric.Energy, oraz Gravimetric.Capacity i Volumetric.Capacity wydaje się logiczna, ponieważ te pary zmiennych powiązane są z gęstością enegrii i pojemności baterii. Dla pary Stability.Charge i Stability.Discharge, wynik również jest zgodny z oczekiwaniami. Stabilość substancji w jednym stanie może być związana z jej stabilością w innym. Dwie pozostałe pary zmiennych o wysokiej korelacji (dla których ta korelacja jest już znacznie niższa) wydają się bardziej interesujące z punktu widzenia badań nad nowymi materiałami.

7 Najważniejsze trendy

Najważniejszym trendem w badaniach nad bateriami wydaje się być zastosowanie litu jako głównego jonu odpowiadającego za transport ładunku. Innymi pierwiastaki często stosowanymi w tym celu są wapń i magnez, natomiast jest to znacznie rzadsze.

print(sum(grepl("O", data$Formula.Charge, ignore.case = FALSE)))
## [1] 3824
print(sum(grepl("O", data$Formula.Discharge, ignore.case = FALSE)))
## [1] 3824

Innym pierwiastkiem często używanym w materiałach do produkcji baterii jest tlen. 3848 materiałów ze zbioru zawiera go w stanie naładowanym i rozładowanym.

Ważnym celem w badaniach nad bateriami jest zwiększanie pojemości oraz gęstości energii. Na bazie uzyskanych wartości korelacji pomiędzy zmiennymi wydaje się że badania nad zwiększeniem udziału atomowego składników w stanie rozładowanym mogą mieć pozytywne skutki dla pojemności, a nad średnim napięciem dla energii.

8 Predykcja dalszych cech

8.1 Przygotowanie regreora

W celu predykcji wartości Volumetric.Capacity nowych materiałów zastosowano regresor wykorzystujący algorytm Random Forest. Z danych uczących usunięto kolumny tekstowe z wyjątkiem Working.Ion, z uwagi na ich niską informatywność dla regresora - bardzo dużo liczba wartości kategorycznych. Usnięto również zmienną Gravimetric.Capacity - wysoka korelacja z Volumetric.Capacity sprawia że predykcja na jej bazie jest pozbawiona sensu.

Dane zostały podzielone na zbiór treningowy i testowy. Zbiór treningowy stanowi 70% całości zbioru. Do próbkowania zbioru danych użyto metody k-krotnej walidacji krzyżowej.

regression_columns <- setdiff(columns, c("Battery.Formula", "Formula.Charge", "Formula.Discharge", "Battery.ID", "Gravimetric.Capacity"))
source <- data[regression_columns]

idx <- createDataPartition(y = source$Volumetric.Capacity, p = 0.7, list = FALSE)
train <- source[idx,]
test <- source[-idx,]

ctrl <- trainControl(method = "repeatedcv",
                      number = 2, repeats = 5)

fit <- train(Volumetric.Capacity ~ .,
             data = train,
             method = "rf",
             trControl = ctrl,
             importance = TRUE,
             ntree = 10)
rfClasses <- predict(fit, newdata = test)

8.2 Wyniki uczenia

kable(fit$results, caption="Tabela wyników z podzbioru uczącego")
Tabela wyników z podzbioru uczącego
mtry RMSE Rsquared MAE RMSESD RsquaredSD MAESD
2 248.2684 0.8473385 132.15075 23.26967 0.0274387 7.035773
10 158.5783 0.9227995 62.30159 26.63345 0.0292285 4.234356
19 156.9946 0.9254912 47.44303 23.23716 0.0264372 3.911375
res_pred <- postResample(pred = rfClasses, obs = test$Volumetric.Capacity)
kable(res_pred[1:2])
x
RMSE 206.9230965
Rsquared 0.8760484

8.3 Predykcja cech nowych materiałów

Predykcję wartości Volumetric.Capacity dla nowych baterii przeprowadzono na trzech przykładach. Zostały one przestawaione w poniższej tabeli:

new_materials <- data.frame(
  Working.Ion = c("Li", "Li", "Ca"),
  Max.Delta.Volume = c(3, 0.1, 0.5),
  Average.Voltage = c(0.1, -0.2, 0.4),
  Gravimetric.Energy = c(200, 50, 100),
  Volumetric.Energy = c(600, 150, 300),
  Atomic.Fraction.Charge = c(0, 0, 0.5),
  Atomic.Fraction.Discharge = c(0.75, 0.8, 0.9),
  Stability.Charge = c(0, 0.1, 0.05),
  Stability.Discharge = c(0.01, 0.05, 0.1),
  Steps = c(1, 1, 1),
  Max.Voltage.Step = c(0, 0, 0)
)

predicted <- predict(fit, newdata = new_materials)
new_materials$Predicted.Volumetric.Capacity = predicted
kable(new_materials)
Working.Ion Max.Delta.Volume Average.Voltage Gravimetric.Energy Volumetric.Energy Atomic.Fraction.Charge Atomic.Fraction.Discharge Stability.Charge Stability.Discharge Steps Max.Voltage.Step Predicted.Volumetric.Capacity
Li 3.0 0.1 200 600 0.0 0.75 0.00 0.01 1 0 4081.459
Li 0.1 -0.2 50 150 0.0 0.80 0.10 0.05 1 0 4776.475
Ca 0.5 0.4 100 300 0.5 0.90 0.05 0.10 1 0 6693.135